
// compose就是指上一个函数的结果作为下一个函数的参数
function compose(...functions) {
    // 过滤掉undefined\null其他非函数类型的值  fn.length > 0过滤掉空函数
    // fn.length指的是函数入参个数，既然没有入参那就过滤掉
    functions = [...functions].filter(fn => typeof fn === 'function'&& fn.length > 0);
  
    // 返回组合函数
    return function (initialValue) {
      return functions.reduceRight((acc, fn) => fn(acc), initialValue);
    };
  }
  

  // 实例
const add10 = (x) => x + 10;  // 加 10
const multiplyBy2 = (x) => x * 2;  // 乘以 2
const subtract5 = (x) => x - 5;  // 减去 5
const processNumber = compose(subtract5, multiplyBy2, add10);

const result = processNumber(5);  // 结果为 (((5 + 10) * 2) - 5)
console.log(result);  // 输出 25